package com.example.Utils;

import cn.novelweb.tool.http.Result;
import com.example.enums.ErrorCode;
import com.example.enums.NovelWebResultCode;
import com.example.model.response.ServiceResult;
import com.example.model.response.ServiceResultEntity;

/*
 * 针对NovelWeb工具的相关工具类
 */

/**
 * NovelWeb上传模块中的常用状态码：
 * 200：SUCCESS 上传成功/文件妙传成功
 * 201：FILE_IS_UPLOADED 文件已上传，无需再次上传（等价成功）
 * 206：PARTIAL_CONTENT 分片未全部上传（缺chunk）
 * 其他：ERROR 上传失败
 * <p>
 * Result.getData()是什么：当code=206时，result.getData()：
 * {
 * "chunkSize": 5,
 * "uploadedChunks": [0,1,3,4],
 * "missingChunks": [2]
 * }
 */
public class NovelWebUtils {
    /**
     * 将文件md5检查结果转为ServiceResult结果
     *
     * @param result NovelWeb上传结果
     * @return ServiceResult结果
     */
    public static ServiceResult<Object> forReturn(Result<?> result) {
        String code = result.getCode();

        // 上传成功 / 秒传成功 / 文件已上传
        if (NovelWebResultCode.SUCCESS.getCode().equals(code)
                || NovelWebResultCode.FILE_UPLOADED.getCode().equals(code)) {
            // 成功时，将数据返回，不要返回null
            return ServiceResultEntity.newSuccessResult(result.getData(), result.getMessage());
        }
        // 缺少分片（断点续传继续上传）
        else if (NovelWebResultCode.MISS_CHUNK.getCode().equals(code)) {
            return ServiceResultEntity.newFailResult(ErrorCode.FILE_CHUNK_MISSING, result.getData(), result.getMessage());
        }
        // 其它情况全部视为失败
        else {
            return ServiceResultEntity.newFailResult(ErrorCode.FILE_UPLOAD_ERROR, result.getMessage());
        }
    }
}

